/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

Ext = {version:"2.2"};
window["undefined"] = window["undefined"];
Ext.apply = function(C, D, B) {
    if (B) {
        Ext.apply(C, B)
    }
    if (C && D && typeof D == "object") {
        for (var A in D) {
            C[A] = D[A]
        }
    }
    return C
};
(function() {
    var idSeed = 0;
    var ua = navigator.userAgent.toLowerCase();
    var isStrict = document.compatMode == "CSS1Compat",isOpera = ua.indexOf("opera") > -1,isSafari = (/webkit|khtml/).test(ua),isSafari3 = isSafari && ua.indexOf("webkit/5") != -1,isIE = !isOpera && ua.indexOf("msie") > -1,isIE7 = !isOpera && ua.indexOf("msie 7") > -1,isGecko = !isSafari && ua.indexOf("gecko") > -1,isGecko3 = !isSafari && ua.indexOf("rv:1.9") > -1,isBorderBox = isIE && !isStrict,isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),isAir = (ua.indexOf("adobeair") != -1),isLinux = (ua.indexOf("linux") != -1),isSecure = window.location.href.toLowerCase().indexOf("https") === 0;
    if (isIE && !isIE7) {
        try {
            document.execCommand("BackgroundImageCache", false, true)
        } catch(e) {
        }
    }
    Ext.apply(Ext, {isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/" + "/extjs.com/s.gif",emptyFn:function() {
    },applyIf:function(o, c) {
        if (o && c) {
            for (var p in c) {
                if (typeof o[p] == "undefined") {
                    o[p] = c[p]
                }
            }
        }
        return o
    },addBehaviors:function(o) {
        if (!Ext.isReady) {
            Ext.onReady(function() {
                Ext.addBehaviors(o)
            });
            return
        }
        var cache = {};
        for (var b in o) {
            var parts = b.split("@");
            if (parts[1]) {
                var s = parts[0];
                if (!cache[s]) {
                    cache[s] = Ext.select(s)
                }
                cache[s].on(parts[1], o[b])
            }
        }
        cache = null
    },id:function(el, prefix) {
        prefix = prefix || "ext-gen";
        el = Ext.getDom(el);
        var id = prefix + (++idSeed);
        return el ? (el.id ? el.id : (el.id = id)) : id
    },extend:function() {
        var io = function(o) {
            for (var m in o) {
                this[m] = o[m]
            }
        };
        var oc = Object.prototype.constructor;
        return function(sb, sp, overrides) {
            if (typeof sp == "object") {
                overrides = sp;
                sp = sb;
                sb = overrides.constructor != oc ? overrides.constructor : function() {
                    sp.apply(this, arguments)
                }
            }
            var F = function() {
            },sbp,spp = sp.prototype;
            F.prototype = spp;
            sbp = sb.prototype = new F();
            sbp.constructor = sb;
            sb.superclass = spp;
            if (spp.constructor == oc) {
                spp.constructor = sp
            }
            sb.override = function(o) {
                Ext.override(sb, o)
            };
            sbp.override = io;
            Ext.override(sb, overrides);
            sb.extend = function(o) {
                Ext.extend(sb, o)
            };
            return sb
        }
    }(),override:function(origclass, overrides) {
        if (overrides) {
            var p = origclass.prototype;
            for (var method in overrides) {
                p[method] = overrides[method]
            }
        }
    },namespace:function() {
        var a = arguments,o = null,i,j,d,rt;
        for (i = 0; i < a.length; ++i) {
            d = a[i].split(".");
            rt = d[0];
            eval("if (typeof " + rt + " == \"undefined\"){" + rt + " = {};} o = " + rt + ";");
            for (j = 1; j < d.length; ++j) {
                o[d[j]] = o[d[j]] || {};
                o = o[d[j]]
            }
        }
    },urlEncode:function(o) {
        if (!o) {
            return""
        }
        var buf = [];
        for (var key in o) {
            var ov = o[key],k = encodeURIComponent(key);
            var type = typeof ov;
            if (type == "undefined") {
                buf.push(k, "=&")
            } else {
                if (type != "function" && type != "object") {
                    buf.push(k, "=", encodeURIComponent(ov), "&")
                } else {
                    if (Ext.isArray(ov)) {
                        if (ov.length) {
                            for (var i = 0,len = ov.length; i < len; i++) {
                                buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? "" : ov[i]), "&")
                            }
                        } else {
                            buf.push(k, "=&")
                        }
                    }
                }
            }
        }
        buf.pop();
        return buf.join("")
    },urlDecode:function(string, overwrite) {
        if (!string || !string.length) {
            return{}
        }
        var obj = {};
        var pairs = string.split("&");
        var pair,name,value;
        for (var i = 0,len = pairs.length; i < len; i++) {
            pair = pairs[i].split("=");
            name = decodeURIComponent(pair[0]);
            value = decodeURIComponent(pair[1]);
            if (overwrite !== true) {
                if (typeof obj[name] == "undefined") {
                    obj[name] = value
                } else {
                    if (typeof obj[name] == "string") {
                        obj[name] = [obj[name]];
                        obj[name].push(value)
                    } else {
                        obj[name].push(value)
                    }
                }
            } else {
                obj[name] = value
            }
        }
        return obj
    },each:function(array, fn, scope) {
        if (typeof array.length == "undefined" || typeof array == "string") {
            array = [array]
        }
        for (var i = 0,len = array.length; i < len; i++) {
            if (fn.call(scope || array[i], array[i], i, array) === false) {
                return i
            }
        }
    },combine:function() {
        var as = arguments,l = as.length,r = [];
        for (var i = 0; i < l; i++) {
            var a = as[i];
            if (Ext.isArray(a)) {
                r = r.concat(a)
            } else {
                if (a.length !== undefined && !a.substr) {
                    r = r.concat(Array.prototype.slice.call(a, 0))
                } else {
                    r.push(a)
                }
            }
        }
        return r
    },escapeRe:function(s) {
        return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1")
    },callback:function(cb, scope, args, delay) {
        if (typeof cb == "function") {
            if (delay) {
                cb.defer(delay, scope, args || [])
            } else {
                cb.apply(scope, args || [])
            }
        }
    },getDom:function(el) {
        if (!el || !document) {
            return null
        }
        return el.dom ? el.dom : (typeof el == "string" ? document.getElementById(el) : el)
    },getDoc:function() {
        return Ext.get(document)
    },getBody:function() {
        return Ext.get(document.body || document.documentElement)
    },getCmp:function(id) {
        return Ext.ComponentMgr.get(id)
    },num:function(v, defaultValue) {
        if (typeof v != "number") {
            return defaultValue
        }
        return v
    },destroy:function() {
        for (var i = 0,a = arguments,len = a.length; i < len; i++) {
            var as = a[i];
            if (as) {
                if (typeof as.destroy == "function") {
                    as.destroy()
                } else {
                    if (as.dom) {
                        as.removeAllListeners();
                        as.remove()
                    }
                }
            }
        }
    },removeNode:isIE ? function() {
        var d;
        return function(n) {
            if (n && n.tagName != "BODY") {
                d = d || document.createElement("div");
                d.appendChild(n);
                d.innerHTML = ""
            }
        }
    }() : function(n) {
        if (n && n.parentNode && n.tagName != "BODY") {
            n.parentNode.removeChild(n)
        }
    },type:function(o) {
        if (o === undefined || o === null) {
            return false
        }
        if (o.htmlElement) {
            return"element"
        }
        var t = typeof o;
        if (t == "object" && o.nodeName) {
            switch (o.nodeType) {case 1:return"element";case 3:return(/\S/).test(o.nodeValue) ? "textnode" : "whitespace"}
        }
        if (t == "object" || t == "function") {
            switch (o.constructor) {case Array:return"array";case RegExp:return"regexp"}
            if (typeof o.length == "number" && typeof o.item == "function") {
                return"nodelist"
            }
        }
        return t
    },isEmpty:function(v, allowBlank) {
        return v === null || v === undefined || (!allowBlank ? v === "" : false)
    },value:function(v, defaultValue, allowBlank) {
        return Ext.isEmpty(v, allowBlank) ? defaultValue : v
    },isArray:function(v) {
        return v && typeof v.length == "number" && typeof v.splice == "function"
    },isDate:function(v) {
        return v && typeof v.getFullYear == "function"
    },isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari && !isSafari3,isIE:isIE,isIE6:isIE && !isIE7,isIE7:isIE7,isGecko:isGecko,isGecko2:isGecko && !isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE && !isIE7) || (isMac && isGecko && !isGecko3))});
    Ext.ns = Ext.namespace
})();
Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data", "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux");
Ext.apply(Function.prototype, {createCallback:function() {
    var A = arguments;
    var B = this;
    return function() {
        return B.apply(window, A)
    }
},createDelegate:function(C, B, A) {
    var D = this;
    return function() {
        var F = B || arguments;
        if (A === true) {
            F = Array.prototype.slice.call(arguments, 0);
            F = F.concat(B)
        } else {
            if (typeof A == "number") {
                F = Array.prototype.slice.call(arguments, 0);
                var E = [A,0].concat(B);
                Array.prototype.splice.apply(F, E)
            }
        }
        return D.apply(C || window, F)
    }
},defer:function(C, E, B, A) {
    var D = this.createDelegate(E, B, A);
    if (C) {
        return setTimeout(D, C)
    }
    D();
    return 0
},createSequence:function(B, A) {
    if (typeof B != "function") {
        return this
    }
    var C = this;
    return function() {
        var D = C.apply(this || window, arguments);
        B.apply(A || this || window, arguments);
        return D
    }
},createInterceptor:function(B, A) {
    if (typeof B != "function") {
        return this
    }
    var C = this;
    return function() {
        B.target = this;
        B.method = C;
        if (B.apply(A || this || window, arguments) === false) {
            return
        }
        return C.apply(this || window, arguments)
    }
}});
Ext.applyIf(String, {escape:function(A) {
    return A.replace(/('|\\)/g, "\\$1")
},leftPad:function(D, B, C) {
    var A = new String(D);
    if (!C) {
        C = " "
    }
    while (A.length < B) {
        A = C + A
    }
    return A.toString()
},format:function(B) {
    var A = Array.prototype.slice.call(arguments, 1);
    return B.replace(/\{(\d+)\}/g, function(C, D) {
        return A[D]
    })
}});
String.prototype.toggle = function(B, A) {
    return this == B ? A : B
};
String.prototype.trim = function() {
    var A = /^\s+|\s+$/g;
    return function() {
        return this.replace(A, "")
    }
}();
Ext.applyIf(Number.prototype, {constrain:function(B, A) {
    return Math.min(Math.max(this, B), A)
}});
Ext.applyIf(Array.prototype, {indexOf:function(C) {
    for (var B = 0,A = this.length; B < A; B++) {
        if (this[B] == C) {
            return B
        }
    }
    return -1
},remove:function(B) {
    var A = this.indexOf(B);
    if (A != -1) {
        this.splice(A, 1)
    }
    return this
}});
Date.prototype.getElapsed = function(A) {
    return Math.abs((A || new Date()).getTime() - this.getTime())
};
(function() {
    var B;
    Ext.lib.Dom = {getViewWidth:function(E) {
        return E ? this.getDocumentWidth() : this.getViewportWidth()
    },getViewHeight:function(E) {
        return E ? this.getDocumentHeight() : this.getViewportHeight()
    },getDocumentHeight:function() {
        var E = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
        return Math.max(E, this.getViewportHeight())
    },getDocumentWidth:function() {
        var E = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
        return Math.max(E, this.getViewportWidth())
    },getViewportHeight:function() {
        if (Ext.isIE) {
            return Ext.isStrict ? document.documentElement.clientHeight : document.body.clientHeight
        } else {
            return self.innerHeight
        }
    },getViewportWidth:function() {
        if (Ext.isIE) {
            return Ext.isStrict ? document.documentElement.clientWidth : document.body.clientWidth
        } else {
            return self.innerWidth
        }
    },isAncestor:function(F, G) {
        F = Ext.getDom(F);
        G = Ext.getDom(G);
        if (!F || !G) {
            return false
        }
        if (F.contains && !Ext.isSafari) {
            return F.contains(G)
        } else {
            if (F.compareDocumentPosition) {
                return !!(F.compareDocumentPosition(G) & 16)
            } else {
                var E = G.parentNode;
                while (E) {
                    if (E == F) {
                        return true
                    } else {
                        if (!E.tagName || E.tagName.toUpperCase() == "HTML") {
                            return false
                        }
                    }
                    E = E.parentNode
                }
                return false
            }
        }
    },getRegion:function(E) {
        return Ext.lib.Region.getRegion(E)
    },getY:function(E) {
        return this.getXY(E)[1]
    },getX:function(E) {
        return this.getXY(E)[0]
    },getXY:function(G) {
        var F,K,M,N,J = (document.body || document.documentElement);
        G = Ext.getDom(G);
        if (G == J) {
            return[0,0]
        }
        if (G.getBoundingClientRect) {
            M = G.getBoundingClientRect();
            N = C(document).getScroll();
            return[M.left + N.left,M.top + N.top]
        }
        var O = 0,L = 0;
        F = G;
        var E = C(G).getStyle("position") == "absolute";
        while (F) {
            O += F.offsetLeft;
            L += F.offsetTop;
            if (!E && C(F).getStyle("position") == "absolute") {
                E = true
            }
            if (Ext.isGecko) {
                K = C(F);
                var P = parseInt(K.getStyle("borderTopWidth"), 10) || 0;
                var H = parseInt(K.getStyle("borderLeftWidth"), 10) || 0;
                O += H;
                L += P;
                if (F != G && K.getStyle("overflow") != "visible") {
                    O += H;
                    L += P
                }
            }
            F = F.offsetParent
        }
        if (Ext.isSafari && E) {
            O -= J.offsetLeft;
            L -= J.offsetTop
        }
        if (Ext.isGecko && !E) {
            var I = C(J);
            O += parseInt(I.getStyle("borderLeftWidth"), 10) || 0;
            L += parseInt(I.getStyle("borderTopWidth"), 10) || 0
        }
        F = G.parentNode;
        while (F && F != J) {
            if (!Ext.isOpera || (F.tagName != "TR" && C(F).getStyle("display") != "inline")) {
                O -= F.scrollLeft;
                L -= F.scrollTop
            }
            F = F.parentNode
        }
        return[O,L]
    },setXY:function(E, F) {
        E = Ext.fly(E, "_setXY");
        E.position();
        var G = E.translatePoints(F);
        if (F[0] !== false) {
            E.dom.style.left = G.left + "px"
        }
        if (F[1] !== false) {
            E.dom.style.top = G.top + "px"
        }
    },setX:function(F, E) {
        this.setXY(F, [E,false])
    },setY:function(E, F) {
        this.setXY(E, [false,F])
    }};
    Ext.lib.Event = function() {
        var F = false;
        var G = [];
        var K = [];
        var I = 0;
        var H = [];
        var E = 0;
        var J = null;
        return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function() {
            if (!this._interval) {
                var L = this;
                var M = function() {
                    L._tryPreloadAttach()
                };
                this._interval = setInterval(M, this.POLL_INTERVAL)
            }
        },onAvailable:function(N, L, O, M) {
            H.push({id:N,fn:L,obj:O,override:M,checkReady:false});
            I = this.POLL_RETRYS;
            this.startInterval()
        },addListener:function(Q, M, P) {
            Q = Ext.getDom(Q);
            if (!Q || !P) {
                return false
            }
            if ("unload" == M) {
                K[K.length] = [Q,M,P];
                return true
            }
            var O = function(R) {
                return typeof Ext != "undefined" ? P(Ext.lib.Event.getEvent(R)) : false
            };
            var L = [Q,M,P,O];
            var N = G.length;
            G[N] = L;
            this.doAdd(Q, M, O, false);
            return true
        },removeListener:function(S, O, R) {
            var Q,N;
            S = Ext.getDom(S);
            if (!R) {
                return this.purgeElement(S, false, O)
            }
            if ("unload" == O) {
                for (Q = 0,N = K.length; Q < N; Q++) {
                    var M = K[Q];
                    if (M && M[0] == S && M[1] == O && M[2] == R) {
                        K.splice(Q, 1);
                        return true
                    }
                }
                return false
            }
            var L = null;
            var P = arguments[3];
            if ("undefined" == typeof P) {
                P = this._getCacheIndex(S, O, R)
            }
            if (P >= 0) {
                L = G[P]
            }
            if (!S || !L) {
                return false
            }
            this.doRemove(S, O, L[this.WFN], false);
            delete G[P][this.WFN];
            delete G[P][this.FN];
            G.splice(P, 1);
            return true
        },getTarget:function(N, M) {
            N = N.browserEvent || N;
            var L = N.target || N.srcElement;
            return this.resolveTextNode(L)
        },resolveTextNode:function(L) {
            if (Ext.isSafari && L && 3 == L.nodeType) {
                return L.parentNode
            } else {
                return L
            }
        },getPageX:function(M) {
            M = M.browserEvent || M;
            var L = M.pageX;
            if (!L && 0 !== L) {
                L = M.clientX || 0;
                if (Ext.isIE) {
                    L += this.getScroll()[1]
                }
            }
            return L
        },getPageY:function(L) {
            L = L.browserEvent || L;
            var M = L.pageY;
            if (!M && 0 !== M) {
                M = L.clientY || 0;
                if (Ext.isIE) {
                    M += this.getScroll()[0]
                }
            }
            return M
        },getXY:function(L) {
            L = L.browserEvent || L;
            return[this.getPageX(L),this.getPageY(L)]
        },getRelatedTarget:function(M) {
            M = M.browserEvent || M;
            var L = M.relatedTarget;
            if (!L) {
                if (M.type == "mouseout") {
                    L = M.toElement
                } else {
                    if (M.type == "mouseover") {
                        L = M.fromElement
                    }
                }
            }
            return this.resolveTextNode(L)
        },getTime:function(N) {
            N = N.browserEvent || N;
            if (!N.time) {
                var M = new Date().getTime();
                try {
                    N.time = M
                } catch(L) {
                    this.lastError = L;
                    return M
                }
            }
            return N.time
        },stopEvent:function(L) {
            this.stopPropagation(L);
            this.preventDefault(L)
        },stopPropagation:function(L) {
            L = L.browserEvent || L;
            if (L.stopPropagation) {
                L.stopPropagation()
            } else {
                L.cancelBubble = true
            }
        },preventDefault:function(L) {
            L = L.browserEvent || L;
            if (L.preventDefault) {
                L.preventDefault()
            } else {
                L.returnValue = false
            }
        },getEvent:function(M) {
            var L = M || window.event;
            if (!L) {
                var N = this.getEvent.caller;
                while (N) {
                    L = N.arguments[0];
                    if (L && Event == L.constructor) {
                        break
                    }
                    N = N.caller
                }
            }
            return L
        },getCharCode:function(L) {
            L = L.browserEvent || L;
            return L.charCode || L.keyCode || 0
        },_getCacheIndex:function(Q, N, P) {
            for (var O = 0,M = G.length; O < M; ++O) {
                var L = G[O];
                if (L && L[this.FN] == P && L[this.EL] == Q && L[this.TYPE] == N) {
                    return O
                }
            }
            return -1
        },elCache:{},getEl:function(L) {
            return document.getElementById(L)
        },clearCache:function() {
        },_load:function(M) {
            F = true;
            var L = Ext.lib.Event;
            if (Ext.isIE) {
                L.doRemove(window, "load", L._load)
            }
        },_tryPreloadAttach:function() {
            if (this.locked) {
                return false
            }
            this.locked = true;
            var R = !F;
            if (!R) {
                R = (I > 0)
            }
            var Q = [];
            for (var M = 0,L = H.length; M < L; ++M) {
                var P = H[M];
                if (P) {
                    var O = this.getEl(P.id);
                    if (O) {
                        if (!P.checkReady || F || O.nextSibling || (document && document.body)) {
                            var N = O;
                            if (P.override) {
                                if (P.override === true) {
                                    N = P.obj
                                } else {
                                    N = P.override
                                }
                            }
                            P.fn.call(N, P.obj);
                            H[M] = null
                        }
                    } else {
                        Q.push(P)
                    }
                }
            }
            I = (Q.length === 0) ? 0 : I - 1;
            if (R) {
                this.startInterval()
            } else {
                clearInterval(this._interval);
                this._interval = null
            }
            this.locked = false;
            return true
        },purgeElement:function(P, Q, N) {
            var R = this.getListeners(P, N);
            if (R) {
                for (var O = 0,L = R.length; O < L; ++O) {
                    var M = R[O];
                    this.removeListener(P, M.type, M.fn)
                }
            }
            if (Q && P && P.childNodes) {
                for (O = 0,L = P.childNodes.length; O < L; ++O) {
                    this.purgeElement(P.childNodes[O], Q, N)
                }
            }
        },getListeners:function(M, R) {
            var P = [],L;
            if (!R) {
                L = [G,K]
            } else {
                if (R == "unload") {
                    L = [K]
                } else {
                    L = [G]
                }
            }
            for (var O = 0; O < L.length; ++O) {
                var T = L[O];
                if (T && T.length > 0) {
                    for (var Q = 0,S = T.length; Q < S; ++Q) {
                        var N = T[Q];
                        if (N && N[this.EL] === M && (!R || R === N[this.TYPE])) {
                            P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.ADJ_SCOPE],index:Q})
                        }
                    }
                }
            }
            return(P.length) ? P : null
        },_unload:function(S) {
            var R = Ext.lib.Event,P,O,M,L,N;
            for (P = 0,L = K.length; P < L; ++P) {
                M = K[P];
                if (M) {
                    var Q = window;
                    if (M[R.ADJ_SCOPE]) {
                        if (M[R.ADJ_SCOPE] === true) {
                            Q = M[R.OBJ]
                        } else {
                            Q = M[R.ADJ_SCOPE]
                        }
                    }
                    M[R.FN].call(Q, R.getEvent(S), M[R.OBJ]);
                    K[P] = null;
                    M = null;
                    Q = null
                }
            }
            K = null;
            if (G && G.length > 0) {
                O = G.length;
                while (O) {
                    N = O - 1;
                    M = G[N];
                    if (M) {
                        R.removeListener(M[R.EL], M[R.TYPE], M[R.FN], N)
                    }
                    O = O - 1
                }
                M = null;
                R.clearCache()
            }
            R.doRemove(window, "unload", R._unload)
        },getScroll:function() {
            var L = document.documentElement,M = document.body;
            if (L && (L.scrollTop || L.scrollLeft)) {
                return[L.scrollTop,L.scrollLeft]
            } else {
                if (M) {
                    return[M.scrollTop,M.scrollLeft]
                } else {
                    return[0,0]
                }
            }
        },doAdd:function() {
            if (window.addEventListener) {
                return function(O, M, N, L) {
                    O.addEventListener(M, N, (L))
                }
            } else {
                if (window.attachEvent) {
                    return function(O, M, N, L) {
                        O.attachEvent("on" + M, N)
                    }
                } else {
                    return function() {
                    }
                }
            }
        }(),doRemove:function() {
            if (window.removeEventListener) {
                return function(O, M, N, L) {
                    O.removeEventListener(M, N, (L))
                }
            } else {
                if (window.detachEvent) {
                    return function(N, L, M) {
                        N.detachEvent("on" + L, M)
                    }
                } else {
                    return function() {
                    }
                }
            }
        }()}
    }();
    var D = Ext.lib.Event;
    D.on = D.addListener;
    D.un = D.removeListener;
    if (document && document.body) {
        D._load()
    } else {
        D.doAdd(window, "load", D._load)
    }
    D.doAdd(window, "unload", D._unload);
    D._tryPreloadAttach();
    Ext.lib.Ajax = {request:function(K, I, E, J, F) {
        if (F) {
            var G = F.headers;
            if (G) {
                for (var H in G) {
                    if (G.hasOwnProperty(H)) {
                        this.initHeader(H, G[H], false)
                    }
                }
            }
            if (F.xmlData) {
                if (!G || !G["Content-Type"]) {
                    this.initHeader("Content-Type", "text/xml", false)
                }
                K = (K ? K : (F.method ? F.method : "POST"));
                J = F.xmlData
            } else {
                if (F.jsonData) {
                    if (!G || !G["Content-Type"]) {
                        this.initHeader("Content-Type", "application/json", false)
                    }
                    K = (K ? K : (F.method ? F.method : "POST"));
                    J = typeof F.jsonData == "object" ? Ext.encode(F.jsonData) : F.jsonData
                }
            }
        }
        return this.asyncRequest(K, I, E, J)
    },serializeForm:function(F) {
        if (typeof F == "string") {
            F = (document.getElementById(F) || document.forms[F])
        }
        var G,E,H,J,K = "",M = false;
        for (var L = 0; L < F.elements.length; L++) {
            G = F.elements[L];
            J = F.elements[L].disabled;
            E = F.elements[L].name;
            H = F.elements[L].value;
            if (!J && E) {
                switch (G.type) {case"select-one":case"select-multiple":for (var I = 0; I < G.options.length; I++) {
                    if (G.options[I].selected) {
                        if (Ext.isIE) {
                            K += encodeURIComponent(E) + "=" + encodeURIComponent(G.options[I].attributes["value"].specified ? G.options[I].value : G.options[I].text) + "&"
                        } else {
                            K += encodeURIComponent(E) + "=" + encodeURIComponent(G.options[I].hasAttribute("value") ? G.options[I].value : G.options[I].text) + "&"
                        }
                    }
                }break;case"radio":case"checkbox":if (G.checked) {
                    K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&"
                }break;case"file":case undefined:case"reset":case"button":break;case"submit":if (M == false) {
                    K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&";
                    M = true
                }break;default:K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&";break}
            }
        }
        K = K.substr(0, K.length - 1);
        return K
    },headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded; charset=UTF-8",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(E) {
        this.activeX.unshift(E)
    },setDefaultPostHeader:function(E) {
        this.useDefaultHeader = E
    },setDefaultXhrHeader:function(E) {
        this.useDefaultXhrHeader = E
    },setPollingInterval:function(E) {
        if (typeof E == "number" && isFinite(E)) {
            this.pollInterval = E
        }
    },createXhrObject:function(I) {
        var H,E;
        try {
            E = new XMLHttpRequest();
            H = {conn:E,tId:I}
        } catch(G) {
            for (var F = 0; F < this.activeX.length; ++F) {
                try {
                    E = new ActiveXObject(this.activeX[F]);
                    H = {conn:E,tId:I};
                    break
                } catch(G) {
                }
            }
        } finally {
            return H
        }
    },getConnectionObject:function() {
        var F;
        var G = this.transactionId;
        try {
            F = this.createXhrObject(G);
            if (F) {
                this.transactionId++
            }
        } catch(E) {
        } finally {
            return F
        }
    },asyncRequest:function(I, F, H, E) {
        var G = this.getConnectionObject();
        if (!G) {
            return null
        } else {
            G.conn.open(I, F, true);
            if (this.useDefaultXhrHeader) {
                if (!this.defaultHeaders["X-Requested-With"]) {
                    this.initHeader("X-Requested-With", this.defaultXhrHeader, true)
                }
            }
            if (E && this.useDefaultHeader && (!this.hasHeaders || !this.headers["Content-Type"])) {
                this.initHeader("Content-Type", this.defaultPostHeader)
            }
            if (this.hasDefaultHeaders || this.hasHeaders) {
                this.setHeader(G)
            }
            this.handleReadyState(G, H);
            G.conn.send(E || null);
            return G
        }
    },handleReadyState:function(F, G) {
        var E = this;
        if (G && G.timeout) {
            this.timeout[F.tId] = window.setTimeout(function() {
                E.abort(F, G, true)
            }, G.timeout)
        }
        this.poll[F.tId] = window.setInterval(function() {
            if (F.conn && F.conn.readyState == 4) {
                window.clearInterval(E.poll[F.tId]);
                delete E.poll[F.tId];
                if (G && G.timeout) {
                    window.clearTimeout(E.timeout[F.tId]);
                    delete E.timeout[F.tId]
                }
                E.handleTransactionResponse(F, G)
            }
        }, this.pollInterval)
    },handleTransactionResponse:function(I, J, E) {
        if (!J) {
            this.releaseObject(I);
            return
        }
        var G,F;
        try {
            if (I.conn.status !== undefined && I.conn.status != 0) {
                G = I.conn.status
            } else {
                G = 13030
            }
        } catch(H) {
            G = 13030
        }
        if (G >= 200 && G < 300) {
            F = this.createResponseObject(I, J.argument);
            if (J.success) {
                if (!J.scope) {
                    J.success(F)
                } else {
                    J.success.apply(J.scope, [F])
                }
            }
        } else {
            switch (G) {case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:F = this.createExceptionObject(I.tId, J.argument, (E ? E : false));if (J.failure) {
                if (!J.scope) {
                    J.failure(F)
                } else {
                    J.failure.apply(J.scope, [F])
                }
            }break;default:F = this.createResponseObject(I, J.argument);if (J.failure) {
                if (!J.scope) {
                    J.failure(F)
                } else {
                    J.failure.apply(J.scope, [F])
                }
            }}
        }
        this.releaseObject(I);
        F = null
    },createResponseObject:function(E, K) {
        var H = {};
        var M = {};
        try {
            var G = E.conn.getAllResponseHeaders();
            var J = G.split("\n");
            for (var I = 0; I < J.length; I++) {
                var F = J[I].indexOf(":");
                if (F != -1) {
                    M[J[I].substring(0, F)] = J[I].substring(F + 2)
                }
            }
        } catch(L) {
        }
        H.tId = E.tId;
        H.status = E.conn.status;
        H.statusText = E.conn.statusText;
        H.getResponseHeader = M;
        H.getAllResponseHeaders = G;
        H.responseText = E.conn.responseText;
        H.responseXML = E.conn.responseXML;
        if (typeof K !== undefined) {
            H.argument = K
        }
        return H
    },createExceptionObject:function(L, H, E) {
        var J = 0;
        var K = "communication failure";
        var G = -1;
        var F = "transaction aborted";
        var I = {};
        I.tId = L;
        if (E) {
            I.status = G;
            I.statusText = F
        } else {
            I.status = J;
            I.statusText = K
        }
        if (H) {
            I.argument = H
        }
        return I
    },initHeader:function(E, H, G) {
        var F = (G) ? this.defaultHeaders : this.headers;
        if (F[E] === undefined) {
            F[E] = H
        } else {
            F[E] = H + "," + F[E]
        }
        if (G) {
            this.hasDefaultHeaders = true
        } else {
            this.hasHeaders = true
        }
    },setHeader:function(E) {
        if (this.hasDefaultHeaders) {
            for (var F in this.defaultHeaders) {
                if (this.defaultHeaders.hasOwnProperty(F)) {
                    E.conn.setRequestHeader(F, this.defaultHeaders[F])
                }
            }
        }
        if (this.hasHeaders) {
            for (var F in this.headers) {
                if (this.headers.hasOwnProperty(F)) {
                    E.conn.setRequestHeader(F, this.headers[F])
                }
            }
            this.headers = {};
            this.hasHeaders = false
        }
    },resetDefaultHeaders:function() {
        delete this.defaultHeaders;
        this.defaultHeaders = {};
        this.hasDefaultHeaders = false
    },abort:function(F, G, E) {
        if (this.isCallInProgress(F)) {
            F.conn.abort();
            window.clearInterval(this.poll[F.tId]);
            delete this.poll[F.tId];
            if (E) {
                delete this.timeout[F.tId]
            }
            this.handleTransactionResponse(F, G, true);
            return true
        } else {
            return false
        }
    },isCallInProgress:function(E) {
        if (E.conn) {
            return E.conn.readyState != 4 && E.conn.readyState != 0
        } else {
            return false
        }
    },releaseObject:function(E) {
        E.conn = null;
        E = null
    },activeX:["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]};
    Ext.lib.Region = function(G, H, E, F) {
        this.top = G;
        this[1] = G;
        this.right = H;
        this.bottom = E;
        this.left = F;
        this[0] = F
    };
    Ext.lib.Region.prototype = {contains:function(E) {
        return(E.left >= this.left && E.right <= this.right && E.top >= this.top && E.bottom <= this.bottom)
    },getArea:function() {
        return((this.bottom - this.top) * (this.right - this.left))
    },intersect:function(I) {
        var G = Math.max(this.top, I.top);
        var H = Math.min(this.right, I.right);
        var E = Math.min(this.bottom, I.bottom);
        var F = Math.max(this.left, I.left);
        if (E >= G && H >= F) {
            return new Ext.lib.Region(G, H, E, F)
        } else {
            return null
        }
    },union:function(I) {
        var G = Math.min(this.top, I.top);
        var H = Math.max(this.right, I.right);
        var E = Math.max(this.bottom, I.bottom);
        var F = Math.min(this.left, I.left);
        return new Ext.lib.Region(G, H, E, F)
    },constrainTo:function(E) {
        this.top = this.top.constrain(E.top, E.bottom);
        this.bottom = this.bottom.constrain(E.top, E.bottom);
        this.left = this.left.constrain(E.left, E.right);
        this.right = this.right.constrain(E.left, E.right);
        return this
    },adjust:function(G, F, E, H) {
        this.top += G;
        this.left += F;
        this.right += H;
        this.bottom += E;
        return this
    }};
    Ext.lib.Region.getRegion = function(H) {
        var J = Ext.lib.Dom.getXY(H);
        var G = J[1];
        var I = J[0] + H.offsetWidth;
        var E = J[1] + H.offsetHeight;
        var F = J[0];
        return new Ext.lib.Region(G, I, E, F)
    };
    Ext.lib.Point = function(E, F) {
        if (Ext.isArray(E)) {
            F = E[1];
            E = E[0]
        }
        this.x = this.right = this.left = this[0] = E;
        this.y = this.top = this.bottom = this[1] = F
    };
    Ext.lib.Point.prototype = new Ext.lib.Region();
    Ext.lib.Anim = {scroll:function(H, F, I, J, E, G) {
        return this.run(H, F, I, J, E, G, Ext.lib.Scroll)
    },motion:function(H, F, I, J, E, G) {
        return this.run(H, F, I, J, E, G, Ext.lib.Motion)
    },color:function(H, F, I, J, E, G) {
        return this.run(H, F, I, J, E, G, Ext.lib.ColorAnim)
    },run:function(I, F, K, L, E, H, G) {
        G = G || Ext.lib.AnimBase;
        if (typeof L == "string") {
            L = Ext.lib.Easing[L]
        }
        var J = new G(I, F, K, L);
        J.animateX(function() {
            Ext.callback(E, H)
        });
        return J
    }};
    function C(E) {
        if (!B) {
            B = new Ext.Element.Flyweight()
        }
        B.dom = E;
        return B
    }
    if (Ext.isIE) {
        function A() {
            var E = Function.prototype;
            delete E.createSequence;
            delete E.defer;
            delete E.createDelegate;
            delete E.createCallback;
            delete E.createInterceptor;
            window.detachEvent("onunload", A)
        }
        window.attachEvent("onunload", A)
    }
    Ext.lib.AnimBase = function(F, E, G, H) {
        if (F) {
            this.init(F, E, G, H)
        }
    };
    Ext.lib.AnimBase.prototype = {toString:function() {
        var E = this.getEl();
        var F = E.id || E.tagName;
        return("Anim " + F)
    },patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(E, G, F) {
        return this.method(this.currentFrame, G, F - G, this.totalFrames)
    },setAttribute:function(E, G, F) {
        if (this.patterns.noNegatives.test(E)) {
            G = (G > 0) ? G : 0
        }
        Ext.fly(this.getEl(), "_anim").setStyle(E, G + F)
    },getAttribute:function(E) {
        var G = this.getEl();
        var I = C(G).getStyle(E);
        if (I !== "auto" && !this.patterns.offsetUnit.test(I)) {
            return parseFloat(I)
        }
        var F = this.patterns.offsetAttribute.exec(E) || [];
        var J = !!(F[3]);
        var H = !!(F[2]);
        if (H || (C(G).getStyle("position") == "absolute" && J)) {
            I = G["offset" + F[0].charAt(0).toUpperCase() + F[0].substr(1)]
        } else {
            I = 0
        }
        return I
    },getDefaultUnit:function(E) {
        if (this.patterns.defaultUnit.test(E)) {
            return"px"
        }
        return""
    },animateX:function(G, E) {
        var F = function() {
            this.onComplete.removeListener(F);
            if (typeof G == "function") {
                G.call(E || this, this)
            }
        };
        this.onComplete.addListener(F, this);
        this.animate()
    },setRuntimeAttribute:function(F) {
        var K;
        var G;
        var H = this.attributes;
        this.runtimeAttributes[F] = {};
        var J = function(L) {
            return(typeof L !== "undefined")
        };
        if (!J(H[F]["to"]) && !J(H[F]["by"])) {
            return false
        }
        K = (J(H[F]["from"])) ? H[F]["from"] : this.getAttribute(F);
        if (J(H[F]["to"])) {
            G = H[F]["to"]
        } else {
            if (J(H[F]["by"])) {
                if (K.constructor == Array) {
                    G = [];
                    for (var I = 0,E = K.length; I < E; ++I) {
                        G[I] = K[I] + H[F]["by"][I]
                    }
                } else {
                    G = K + H[F]["by"]
                }
            }
        }
        this.runtimeAttributes[F].start = K;
        this.runtimeAttributes[F].end = G;
        this.runtimeAttributes[F].unit = (J(H[F].unit)) ? H[F]["unit"] : this.getDefaultUnit(F)
    },init:function(G, L, K, E) {
        var F = false;
        var H = null;
        var J = 0;
        G = Ext.getDom(G);
        this.attributes = L || {};
        this.duration = K || 1;
        this.method = E || Ext.lib.Easing.easeNone;
        this.useSeconds = true;
        this.currentFrame = 0;
        this.totalFrames = Ext.lib.AnimMgr.fps;
        this.getEl = function() {
            return G
        };
        this.isAnimated = function() {
            return F
        };
        this.getStartTime = function() {
            return H
        };
        this.runtimeAttributes = {};
        this.animate = function() {
            if (this.isAnimated()) {
                return false
            }
            this.currentFrame = 0;
            this.totalFrames = (this.useSeconds) ? Math.ceil(Ext.lib.AnimMgr.fps * this.duration) : this.duration;
            Ext.lib.AnimMgr.registerElement(this)
        };
        this.stop = function(O) {
            if (O) {
                this.currentFrame = this.totalFrames;
                this._onTween.fire()
            }
            Ext.lib.AnimMgr.stop(this)
        };
        var N = function() {
            this.onStart.fire();
            this.runtimeAttributes = {};
            for (var O in this.attributes) {
                this.setRuntimeAttribute(O)
            }
            F = true;
            J = 0;
            H = new Date()
        };
        var M = function() {
            var Q = {duration:new Date() - this.getStartTime(),currentFrame:this.currentFrame};
            Q.toString = function() {
                return("duration: " + Q.duration + ", currentFrame: " + Q.currentFrame)
            };
            this.onTween.fire(Q);
            var P = this.runtimeAttributes;
            for (var O in P) {
                this.setAttribute(O, this.doMethod(O, P[O].start, P[O].end), P[O].unit)
            }
            J += 1
        };
        var I = function() {
            var O = (new Date() - H) / 1000;
            var P = {duration:O,frames:J,fps:J / O};
            P.toString = function() {
                return("duration: " + P.duration + ", frames: " + P.frames + ", fps: " + P.fps)
            };
            F = false;
            J = 0;
            this.onComplete.fire(P)
        };
        this._onStart = new Ext.util.Event(this);
        this.onStart = new Ext.util.Event(this);
        this.onTween = new Ext.util.Event(this);
        this._onTween = new Ext.util.Event(this);
        this.onComplete = new Ext.util.Event(this);
        this._onComplete = new Ext.util.Event(this);
        this._onStart.addListener(N);
        this._onTween.addListener(M);
        this._onComplete.addListener(I)
    }};
    Ext.lib.AnimMgr = new function() {
        var G = null;
        var F = [];
        var E = 0;
        this.fps = 1000;
        this.delay = 1;
        this.registerElement = function(J) {
            F[F.length] = J;
            E += 1;
            J._onStart.fire();
            this.start()
        };
        this.unRegister = function(K, J) {
            K._onComplete.fire();
            J = J || I(K);
            if (J != -1) {
                F.splice(J, 1)
            }
            E -= 1;
            if (E <= 0) {
                this.stop()
            }
        };
        this.start = function() {
            if (G === null) {
                G = setInterval(this.run, this.delay)
            }
        };
        this.stop = function(L) {
            if (!L) {
                clearInterval(G);
                for (var K = 0,J = F.length; K < J; ++K) {
                    if (F[0].isAnimated()) {
                        this.unRegister(F[0], 0)
                    }
                }
                F = [];
                G = null;
                E = 0
            } else {
                this.unRegister(L)
            }
        };
        this.run = function() {
            for (var L = 0,J = F.length; L < J; ++L) {
                var K = F[L];
                if (!K || !K.isAnimated()) {
                    continue
                }
                if (K.currentFrame < K.totalFrames || K.totalFrames === null) {
                    K.currentFrame += 1;
                    if (K.useSeconds) {
                        H(K)
                    }
                    K._onTween.fire()
                } else {
                    Ext.lib.AnimMgr.stop(K, L)
                }
            }
        };
        var I = function(L) {
            for (var K = 0,J = F.length; K < J; ++K) {
                if (F[K] == L) {
                    return K
                }
            }
            return -1
        };
        var H = function(K) {
            var N = K.totalFrames;
            var M = K.currentFrame;
            var L = (K.currentFrame * K.duration * 1000 / K.totalFrames);
            var J = (new Date() - K.getStartTime());
            var O = 0;
            if (J < K.duration * 1000) {
                O = Math.round((J / L - 1) * K.currentFrame)
            } else {
                O = N - (M + 1)
            }
            if (O > 0 && isFinite(O)) {
                if (K.currentFrame + O >= N) {
                    O = N - (M + 1)
                }
                K.currentFrame += O
            }
        }
    };
    Ext.lib.Bezier = new function() {
        this.getPosition = function(I, H) {
            var J = I.length;
            var G = [];
            for (var F = 0; F < J; ++F) {
                G[F] = [I[F][0],I[F][1]]
            }
            for (var E = 1; E < J; ++E) {
                for (F = 0; F < J - E; ++F) {
                    G[F][0] = (1 - H) * G[F][0] + H * G[parseInt(F + 1, 10)][0];
                    G[F][1] = (1 - H) * G[F][1] + H * G[parseInt(F + 1, 10)][1]
                }
            }
            return[G[0][0],G[0][1]]
        }
    };
    (function() {
        Ext.lib.ColorAnim = function(I, H, J, K) {
            Ext.lib.ColorAnim.superclass.constructor.call(this, I, H, J, K)
        };
        Ext.extend(Ext.lib.ColorAnim, Ext.lib.AnimBase);
        var F = Ext.lib;
        var G = F.ColorAnim.superclass;
        var E = F.ColorAnim.prototype;
        E.toString = function() {
            var H = this.getEl();
            var I = H.id || H.tagName;
            return("ColorAnim " + I)
        };
        E.patterns.color = /color$/i;
        E.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
        E.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
        E.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
        E.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
        E.parseColor = function(H) {
            if (H.length == 3) {
                return H
            }
            var I = this.patterns.hex.exec(H);
            if (I && I.length == 4) {
                return[parseInt(I[1], 16),parseInt(I[2], 16),parseInt(I[3], 16)]
            }
            I = this.patterns.rgb.exec(H);
            if (I && I.length == 4) {
                return[parseInt(I[1], 10),parseInt(I[2], 10),parseInt(I[3], 10)]
            }
            I = this.patterns.hex3.exec(H);
            if (I && I.length == 4) {
                return[parseInt(I[1] + I[1], 16),parseInt(I[2] + I[2], 16),parseInt(I[3] + I[3], 16)]
            }
            return null
        };
        E.getAttribute = function(H) {
            var J = this.getEl();
            if (this.patterns.color.test(H)) {
                var K = C(J).getStyle(H);
                if (this.patterns.transparent.test(K)) {
                    var I = J.parentNode;
                    K = C(I).getStyle(H);
                    while (I && this.patterns.transparent.test(K)) {
                        I = I.parentNode;
                        K = C(I).getStyle(H);
                        if (I.tagName.toUpperCase() == "HTML") {
                            K = "#fff"
                        }
                    }
                }
            } else {
                K = G.getAttribute.call(this, H)
            }
            return K
        };
        E.doMethod = function(I, M, J) {
            var L;
            if (this.patterns.color.test(I)) {
                L = [];
                for (var K = 0,H = M.length; K < H; ++K) {
                    L[K] = G.doMethod.call(this, I, M[K], J[K])
                }
                L = "rgb(" + Math.floor(L[0]) + "," + Math.floor(L[1]) + "," + Math.floor(L[2]) + ")"
            } else {
                L = G.doMethod.call(this, I, M, J)
            }
            return L
        };
        E.setRuntimeAttribute = function(I) {
            G.setRuntimeAttribute.call(this, I);
            if (this.patterns.color.test(I)) {
                var K = this.attributes;
                var M = this.parseColor(this.runtimeAttributes[I].start);
                var J = this.parseColor(this.runtimeAttributes[I].end);
                if (typeof K[I]["to"] === "undefined" && typeof K[I]["by"] !== "undefined") {
                    J = this.parseColor(K[I].by);
                    for (var L = 0,H = M.length; L < H; ++L) {
                        J[L] = M[L] + J[L]
                    }
                }
                this.runtimeAttributes[I].start = M;
                this.runtimeAttributes[I].end = J
            }
        }
    })();
    Ext.lib.Easing = {easeNone:function(F, E, H, G) {
        return H * F / G + E
    },easeIn:function(F, E, H, G) {
        return H * (F /= G) * F + E
    },easeOut:function(F, E, H, G) {
        return -H * (F /= G) * (F - 2) + E
    },easeBoth:function(F, E, H, G) {
        if ((F /= G / 2) < 1) {
            return H / 2 * F * F + E
        }
        return -H / 2 * ((--F) * (F - 2) - 1) + E
    },easeInStrong:function(F, E, H, G) {
        return H * (F /= G) * F * F * F + E
    },easeOutStrong:function(F, E, H, G) {
        return -H * ((F = F / G - 1) * F * F * F - 1) + E
    },easeBothStrong:function(F, E, H, G) {
        if ((F /= G / 2) < 1) {
            return H / 2 * F * F * F * F + E
        }
        return -H / 2 * ((F -= 2) * F * F * F - 2) + E
    },elasticIn:function(G, E, K, J, F, I) {
        if (G == 0) {
            return E
        }
        if ((G /= J) == 1) {
            return E + K
        }
        if (!I) {
            I = J * 0.3
        }
        if (!F || F < Math.abs(K)) {
            F = K;
            var H = I / 4
        } else {
            var H = I / (2 * Math.PI) * Math.asin(K / F)
        }
        return -(F * Math.pow(2, 10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I)) + E
    },elasticOut:function(G, E, K, J, F, I) {
        if (G == 0) {
            return E
        }
        if ((G /= J) == 1) {
            return E + K
        }
        if (!I) {
            I = J * 0.3
        }
        if (!F || F < Math.abs(K)) {
            F = K;
            var H = I / 4
        } else {
            var H = I / (2 * Math.PI) * Math.asin(K / F)
        }
        return F * Math.pow(2, -10 * G) * Math.sin((G * J - H) * (2 * Math.PI) / I) + K + E
    },elasticBoth:function(G, E, K, J, F, I) {
        if (G == 0) {
            return E
        }
        if ((G /= J / 2) == 2) {
            return E + K
        }
        if (!I) {
            I = J * (0.3 * 1.5)
        }
        if (!F || F < Math.abs(K)) {
            F = K;
            var H = I / 4
        } else {
            var H = I / (2 * Math.PI) * Math.asin(K / F)
        }
        if (G < 1) {
            return -0.5 * (F * Math.pow(2, 10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I)) + E
        }
        return F * Math.pow(2, -10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I) * 0.5 + K + E
    },backIn:function(F, E, I, H, G) {
        if (typeof G == "undefined") {
            G = 1.70158
        }
        return I * (F /= H) * F * ((G + 1) * F - G) + E
    },backOut:function(F, E, I, H, G) {
        if (typeof G == "undefined") {
            G = 1.70158
        }
        return I * ((F = F / H - 1) * F * ((G + 1) * F + G) + 1) + E
    },backBoth:function(F, E, I, H, G) {
        if (typeof G == "undefined") {
            G = 1.70158
        }
        if ((F /= H / 2) < 1) {
            return I / 2 * (F * F * (((G *= (1.525)) + 1) * F - G)) + E
        }
        return I / 2 * ((F -= 2) * F * (((G *= (1.525)) + 1) * F + G) + 2) + E
    },bounceIn:function(F, E, H, G) {
        return H - Ext.lib.Easing.bounceOut(G - F, 0, H, G) + E
    },bounceOut:function(F, E, H, G) {
        if ((F /= G) < (1 / 2.75)) {
            return H * (7.5625 * F * F) + E
        } else {
            if (F < (2 / 2.75)) {
                return H * (7.5625 * (F -= (1.5 / 2.75)) * F + 0.75) + E
            } else {
                if (F < (2.5 / 2.75)) {
                    return H * (7.5625 * (F -= (2.25 / 2.75)) * F + 0.9375) + E
                }
            }
        }
        return H * (7.5625 * (F -= (2.625 / 2.75)) * F + 0.984375) + E
    },bounceBoth:function(F, E, H, G) {
        if (F < G / 2) {
            return Ext.lib.Easing.bounceIn(F * 2, 0, H, G) * 0.5 + E
        }
        return Ext.lib.Easing.bounceOut(F * 2 - G, 0, H, G) * 0.5 + H * 0.5 + E
    }};
    (function() {
        Ext.lib.Motion = function(K, J, L, M) {
            if (K) {
                Ext.lib.Motion.superclass.constructor.call(this, K, J, L, M)
            }
        };
        Ext.extend(Ext.lib.Motion, Ext.lib.ColorAnim);
        var H = Ext.lib;
        var I = H.Motion.superclass;
        var F = H.Motion.prototype;
        F.toString = function() {
            var J = this.getEl();
            var K = J.id || J.tagName;
            return("Motion " + K)
        };
        F.patterns.points = /^points$/i;
        F.setAttribute = function(J, L, K) {
            if (this.patterns.points.test(J)) {
                K = K || "px";
                I.setAttribute.call(this, "left", L[0], K);
                I.setAttribute.call(this, "top", L[1], K)
            } else {
                I.setAttribute.call(this, J, L, K)
            }
        };
        F.getAttribute = function(J) {
            if (this.patterns.points.test(J)) {
                var K = [I.getAttribute.call(this, "left"),I.getAttribute.call(this, "top")]
            } else {
                K = I.getAttribute.call(this, J)
            }
            return K
        };
        F.doMethod = function(J, N, K) {
            var M = null;
            if (this.patterns.points.test(J)) {
                var L = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
                M = H.Bezier.getPosition(this.runtimeAttributes[J], L)
            } else {
                M = I.doMethod.call(this, J, N, K)
            }
            return M
        };
        F.setRuntimeAttribute = function(S) {
            if (this.patterns.points.test(S)) {
                var K = this.getEl();
                var M = this.attributes;
                var J;
                var O = M["points"]["control"] || [];
                var L;
                var P,R;
                if (O.length > 0 && !Ext.isArray(O[0])) {
                    O = [O]
                } else {
                    var N = [];
                    for (P = 0,R = O.length; P < R; ++P) {
                        N[P] = O[P]
                    }
                    O = N
                }
                Ext.fly(K, "_anim").position();
                if (G(M["points"]["from"])) {
                    Ext.lib.Dom.setXY(K, M["points"]["from"])
                } else {
                    Ext.lib.Dom.setXY(K, Ext.lib.Dom.getXY(K))
                }
                J = this.getAttribute("points");
                if (G(M["points"]["to"])) {
                    L = E.call(this, M["points"]["to"], J);
                    var Q = Ext.lib.Dom.getXY(this.getEl());
                    for (P = 0,R = O.length; P < R; ++P) {
                        O[P] = E.call(this, O[P], J)
                    }
                } else {
                    if (G(M["points"]["by"])) {
                        L = [J[0] + M["points"]["by"][0],J[1] + M["points"]["by"][1]];
                        for (P = 0,R = O.length; P < R; ++P) {
                            O[P] = [J[0] + O[P][0],J[1] + O[P][1]]
                        }
                    }
                }
                this.runtimeAttributes[S] = [J];
                if (O.length > 0) {
                    this.runtimeAttributes[S] = this.runtimeAttributes[S].concat(O)
                }
                this.runtimeAttributes[S][this.runtimeAttributes[S].length] = L
            } else {
                I.setRuntimeAttribute.call(this, S)
            }
        };
        var E = function(J, L) {
            var K = Ext.lib.Dom.getXY(this.getEl());
            J = [J[0] - K[0] + L[0],J[1] - K[1] + L[1]];
            return J
        };
        var G = function(J) {
            return(typeof J !== "undefined")
        }
    })();
    (function() {
        Ext.lib.Scroll = function(I, H, J, K) {
            if (I) {
                Ext.lib.Scroll.superclass.constructor.call(this, I, H, J, K)
            }
        };
        Ext.extend(Ext.lib.Scroll, Ext.lib.ColorAnim);
        var F = Ext.lib;
        var G = F.Scroll.superclass;
        var E = F.Scroll.prototype;
        E.toString = function() {
            var H = this.getEl();
            var I = H.id || H.tagName;
            return("Scroll " + I)
        };
        E.doMethod = function(H, K, I) {
            var J = null;
            if (H == "scroll") {
                J = [this.method(this.currentFrame, K[0], I[0] - K[0], this.totalFrames),this.method(this.currentFrame, K[1], I[1] - K[1], this.totalFrames)]
            } else {
                J = G.doMethod.call(this, H, K, I)
            }
            return J
        };
        E.getAttribute = function(H) {
            var J = null;
            var I = this.getEl();
            if (H == "scroll") {
                J = [I.scrollLeft,I.scrollTop]
            } else {
                J = G.getAttribute.call(this, H)
            }
            return J
        };
        E.setAttribute = function(H, K, J) {
            var I = this.getEl();
            if (H == "scroll") {
                I.scrollLeft = K[0];
                I.scrollTop = K[1]
            } else {
                G.setAttribute.call(this, H, K, J)
            }
        }
    })()
})();
